This invention relates to memory systems and, in particular, to memory systems for adding new code to existing base programs.
It is often desirable to expand a program system stored in memories, especially read-only memories, but the fact that a program is fixed raises several problems, among them being those created by requiring a specific address to branch to the new programs, activating and authorizing the added program, validating the new code, and providing for execution of the new code.
Since branching to the new program requires a specific address, the addresses could be stored but this would require using a non-volatile memory space which is limited and expensive. There is also the possibility that, due to human error, wrong addresses could be entered.
The activation and authorization of the added programs are necessary because the new code may not always be required or authorized. It is not desirable to add and to remove memory modules periodically. Furthermore, memory failures could cause the appearance of no program at all.
It is also desirable to be able to validate the new code to ensure before its execution that it is the proper code in the proper place.
The execution of the new code raises problems in determining the branch and link time because excessive branch and link calls can increase the size of the base program unnecessarily as well as increase the number of flags and entry points required for return. On the other hand, too few branch and link calls makes the new code ineffective by being executed too infrequently and decreases the flexibility desired to be obtained by adding the new program.
This invention discloses a system for adding memory without having to alter the base program extensively while avoiding the problems mentioned above.